class Dep {
  constructor() {
    this.effects = new Set();
  }

  //   把要做的放到 effects 里面
  addEffect(effect) {
    this.effects.add(effect);
  }

  //   通知所有的 effects 触发要做的事
  notify() {
    this.effects.forEach((effect) => {
      effect();
    });
  }
}

const dep = new Dep();

let a = 1;
let b, c;

function changeB() {
  b = a + 10;
  console.log(b);
}
function changeC() {
  c = a * 2;
  console.log(c);
}
dep.addEffect(changeB);
dep.addEffect(changeC);

// 手动模拟a变化
{
  a++;
  dep.notify(); //两个跟a挂钩的函数被触发
}
